\section{Portāla izstrādes risinājuma realizācija}

Šī nodaļā tiek aprakstīti universitātes portāla realizācijas paņēmieni, autora
piedāvātās problēmu realizācijas, kā arī daži portāla konfigurācijas piemēri.
Universitātes portālam izvēlētā platforma ir uPortal 4.0.

\subsection{Portāla lietotāju saskarnes izkārtojumi}
Universitātes lietotājiem var būt pieejamas dažādas lomas un atkarībā no lomu
kopas vajadzētu piedāvāt lietotājam portāla izkārtojumu. Tādu iespēju piedāvā
uPortal. Portāls uPortal, sākot ar versiju 4.0.0, atbalsta cilņu grupu
realizāciju, tā saucamo \emph{tabGroup}.


\begin{figure}[H]
\inputminted[ linenos, fontsize=\small,%
lastline=11,  %
firstline=6, %
firstnumber=6]%
{ xml }{source/Admin.fragment-definition.xml}
\caption{Admin.fragment-definition.xml fragments}
\label{lst:fragment-def}
\end{figure}

\begin{figure}[H]
\inputminted[ linenos, fontsize=\small,%
lastline=24,  %
firstline=17, %
firstnumber=17]%
{ xml }{source/admin-lo.fragment-layout.xml}
\caption{admin-lo.fragment-layout.xml fragments}
\label{lst:fragment-layout}
\end{figure}






Pirmkoda piemēri (attēli~\ref{lst:fragment-def} un~\ref{lst:fragment-layout})
rāda, kādā veidā tiek implementēts izkārtojums lietotāju grupām (pilnie failu
pirmkodi pieejami pielikumos~\ref{ap:fragment-def} un
\ref{ap:fragment-layout}).
Piemērā~\ref{lst:fragment-def} tiek definēta abstrakta loma ``Admin''
abstraktam lietotājam admin-lo un piešķirtas tiesības lietotājiem, kuri
atrodas portālā definētā grupā ``Portal Administrators'' vai ``Portal
Developers''. Ir iespēja izmantot grupas, kas ir definētas ne ar portāla
lietotāju grupu pārvaldīšanas mehānismu, bet ar ``Person Attributes Group
Store'' (PAGS) mehānisma palīdzību, kurš satur informāciju par grupām no citiem
avotiem, piemēram LDAP (skatīt~\ref{sec:usersgroups}~nodaļu).

Izmantojot PAGS grupas, \emph{memberOf} vietā tiek izmantots \emph{deepMemberOf}
režīms atribūtam \emph{dlm:audience} birkas iekšienē.

\begin{figure}[h!]
  \centering
    \includegraphics[width=0.5\textwidth]{image/cilnes}
  \caption{Cilnes un apakšcilnes.}
  \label{att:cilnes}
\end{figure}

Attēla~\ref{att:cilnes} redzams rezultāts personalizēto cilņu implementācijai,
katrai lomai ir izveidotas cilnes, piemēram, ``Darbiniekiem'' un ``Studentiem'',
ka arī informācijas panelis, kurā ievietota svarīgākā informācija no citām
cilnēm.

\subsection{Lietotāju grupu izveide un definēšana portālā}
\label{sec:usersgroups}
Lietotāju grupu izveidošanai izmantota uPortal portāla iespēja ``Person
Attributes Group Store'' (PAGS), kura ļauj izmantot ārējus datu avotus
(piemēram, SQL datu bāze vai LDAP) grupu definēšanai.

\begin{figure}[H]
\inputminted[ linenos, fontsize=\small,%
lastline=14,  %
firstline=9, %
firstnumber=9]%
{xml}{source/pagsdao.xml}
\caption{personDirectoryContext.xml LDAP DAO avota pieslēgšana}
\label{lst:pagsdao}
\end{figure}

\begin{figure}[H]
\inputminted[ linenos, fontsize=\small,%
lastline=17,  %
firstline=11, %
firstnumber=11]%
{xml}{source/groupsource.xml}
\caption{personDirectoryContext.xml LDAP DAO avota izveide}
\label{lst:ldapdao}
\end{figure}

Pirmkoda fragments ~\ref{lst:pagsdao} attēlā (lielāks piemērs atrodams
\ref{ap:pagsdao}~pielikumā) attēlo, kādā veidā vajag modificēt
\emph{mergedPersonAttributeDao} sadaļu \emph{personDirectoryContext.xml} datnē, pieliekot
\emph{uPortalLdapAttributeSource} pie datu avotiem, savukārt, pirmkoda piemērs
(\ref{lst:ldapdao}~attēls) attēlo minimālo piemēru LDAP DAO izveidei, kas
arī atrodas \emph{personDirectoryContext.xml} datnē
(\ref{ap:ldapdao}~pielikums).




\begin{figure}[H]
\inputminted[ linenos, fontsize=\small,%
lastline=15,  %
firstline=8, %
firstnumber=8]%
{ xml }{source/pagsstore.xml}
\caption{PAGSGroupStoreConfig.xml fragments}
\label{lst:pagsstore}
\end{figure}

Piemērā \ref{lst:pagsstore}~attēlā iekļauts
\emph{PAGSGroupStoreConfig.xml} fragments, kas realizē lietotāju grupu \emph{example\_group}, pielietojot filtrus LDAP
grupām (\ref{ap:pagsstore} pielikumā ir pieejams pilns koda fragments). 


% koda piemēri, attēli
\subsection{Portāla saturs}
Portāla vērtīgums ir tad, kad tajā ir pieejama informācija un tā savlaicīgi tiek
atjaunota. Lai informāciju varētu savlaicīgi ievadīt, atjaunot un ērti lietotājam
attēlot, nepieciešami speciāli rīki, kas arī tiek aprakstīti šajā
apakšnodaļā.

\subsubsection{Satura pārvaldības portlets WikiPortlet}
\label{sssec:impl-wiki}
Portāla satura pārvaldības problēmas risināšanai tika  izstrādāts portlets ar
\emph{wiki} datu ievades formātu. Wiki portlets ir bāzēts uz Xwiki bibliotēkām
-- tiek izmantotas bibliotēkas priekš \emph{wiki} teksta sintakses analīzei un
pārveidošanai HTML formātā.

Portleta iespējas un īpašības ir:
\begin{itemize}
  \item vienkāršs datu ievades process un viennozīmīga sintakse
  \item liela daudzuma lapu ievades iespēja viena portletā
  \item valodu atbalsts un automātiska valodas izvēle
  \item iespēja veidot saites starp portleta rakstiem, kā arī uz citiem Wiki
  portletu rakstiem
\end{itemize}

Plānotās izmaiņas un potenciālas jaunas iespējas:
\begin{itemize}
  \item meklēšanas iespējas, ko piedāvā Portlet 2.0
  API(skatīt nodaļu~\ref{subsec:jsr286}), implementēšana
  \item rakstu versiju kontroles mehānisma izstrāde
  \item kešošanas mehānisma izstrāde
\end{itemize}


\begin{figure}[H]
  \centering
    \includegraphics[width=0.5\textwidth]{image/wiki-editor}
  \caption{Wiki portleta rediģēšanas skats}
  \label{att:wiki-editor}
\end{figure}

Attēls~\ref{att:wiki-editor} attēlo lietotāja saskarni \emph{wiki} lapas
labošanai. Pieejamas saskarnes elementi ir:
\begin{itemize}
  \item poga ``Attēlot visus'', kas attēlo sarakstu ar saitēm uz visām portleta
  eksistējošām lapām
  \item poga ``Uz sākumu'', kas ļauj atgriezties uz konkrēta portleta galveno
  lapu
  \item laukums \emph{wiki} teksta ievadei lapai
  \item lauks lapas nosaukuma ievadei
  \item poga ``Submit'' izmaiņu saglabāšanai
\end{itemize}

\begin{figure}[H]
  \centering
    \includegraphics[width=0.5\textwidth]{image/wiki-result-admin}
  \caption{Wiki portleta attēlošanas skats ar rediģēšanas iespēju}
  \label{att:wiki-result-admin}
\end{figure}

Attēlā~\ref{att:wiki-result-admin} ir redzama saknes lapas attēlošana 
lietotājam ar rediģēšanas tiesībām.
Daži saskarnes elementi atšķiras un tie ir:
\begin{itemize}
  \item poga ``Rediģēt'', kas ved uz rediģēšanas formu, kas ir redzama
  \ref{att:wiki-editor}
  \item valodu pārvaldības bloks:
  	\begin{itemize}
	  \item ar trekno burtrakstu attēlo izvēlēto valodu
	  \item valodas, kurās lapa ir pieejama, attēlojas kā parastās saites
	  \item valodas, kurās lapa nav pieejama, attēlojas kā saite ar citu krāsu,
	  konkrētā gadījumā -- ar gaiši zaļu
	\end{itemize}
  \item lapas virsraksts (``Paraugs'')
  \item rezultējošā lapa, kas veidojas, konvertējot \emph{wiki}
  sintakses~\cite{link:xwiki-syntax} tekstu ar \emph{Xwiki}
  bibliotēku~\cite{link:xwiki} palīdzību.
\end{itemize}

\begin{figure}[H]
  \centering
    \includegraphics[width=0.5\textwidth]{image/wiki-result}
  \caption{Wiki portleta attēlošanas skats bez rediģēšanas iespējas}
  \label{att:wiki-result}
\end{figure}

Attēlā~\ref{att:wiki-result} var redzēt parastam lietotājam pieejamo skatu
saknes lapai. Atšķīrībā no ~\ref{att:wiki-result-admin} attēlā redzamās
situācijas, parastam lietotājam netiek rādīti administratīvie elementi un valodu
izvēlne. Valodu izvēlni lietotājs redzēs tikai tad, ja sistēmā izvēlētai valodai
konkrētā lapa nav pieejama, tādā gadījumā bloks attēlosies tādā veidā, kā
lietotājam ar rediģēšanas tiesībām.


Izstrādāts portlets tagad pieejams ka atklāta koda risinājums GitHub
repozitorijā~\cite{github:wiki-portlet}

\subsection{Valodu atbalsts}

Valodu atbalsts uPortal portālā, sākot ar versiju 4.0.0, kļuvis daudz spēcīgāks
nekā versijas 3.2.x  relīzes. Sākot ar 4.0.1 versiju, izmaiņas kodā
nav nepieciešamas, lai tulkotu visu portāla statisko saturu (cilņu un apakšcilņu
nosaukumi, paziņojumi un citi saskarnes elementi), portletu nosaukumu aprakstus,
kā arī iekļauto portletu saturu.

\begin{figure}[H]
  \centering
    \includegraphics[width=0.7\textwidth]{image/locale-selector}
  \caption{Valodu izvēle uPortal portāla}
  \label{att:lang-selector}
\end{figure}
Lai izmantotu portāla lokalizācijas  iespēju statiskajiem teksta fragmentiem
kādā no valodām, vajag pārliecināties, vai tā ir iekļauta portāla valodu
sarakstā. Ja portāls jau ir palaists, tad to var apskatīt porleta \emph{User
Locale Selector}~(skatīt \ref{att:lang-selector}~attēlu), ka arī var,
nestartējot portālu, apskatīt portāla pirmkodu datnes \emph{portal.properties}
atslēgas \emph{org.jasig.portal.i18n.LocaleManager.portal\_locales} vērtību
(latviešu valodas gadījumā -- \emph{lv\_LV}).
Izmantojot \emph{org.jasig.portal.i18n.LocaleManager.portal\_locales} atslēgu,
var kontrolēt valodu kopu: pievienot valodas un atslēgt nevajadzīgās. Gadījumā,
kad vajag izveidot jaunu valodu, jāizveido direktorijā
\emph{./uportal-war/src/main/resources/properties/i18n/} datne ar tulkojumiem,
piemēram, \emph{Messages\_lv.properties} latviešu valodai.

Konkrētā gadījumā visas nepieciešamās valodas bija pieejamas, tāpēc no
\emph{portal.properties} tikai tika izņemtas nevajadzīgās valodas un tulkojumu
failus nevajadzēja veidot, tikai labot eksistējošus.

Lokalizējot portālu, ir nepieciešamība tulkot arī teksta fragmentus, kurus var
modificēt, saglabājot vērtības datu bāzē. Tāds saturs pārsvarā mainās,
izmantojot grafisku saskarni, tāpēc ir izveidots rīks, kas ļauj tulkot teksta
fragmentus datu bāzē. Rīks ļauj pievienot datu bāzei jaunus teksta fragmentus.
\begin{figure}[H]
  \centering
    \includegraphics[width=0.7\textwidth]{image/translator-portlet}
  \caption{Portāla nosaukuma tulkošana ar tulkošanas rīku}
  \label{att:translator-portlet}
\end{figure}


\begin{figure}[H]
  \centering
    \includegraphics[width=0.7\textwidth]{image/translator-message}
  \caption{Portāla paziņojumu tulkošana ar tulkošanas rīku}
  \label{att:translator-message}
\end{figure}

Izveidotais rīks ļauj tulkot nosaukumus un aprakstus
(\ref{att:translator-portlet} attēls) un portāla cilņu un apakšcilņu nosaukumus
(\ref{att:translator-message} attēls)~\cite{jasig:translator}.

 Risinājuma autors ir Arvīds Grabovskis~\cite{jasig:translator} un izmaiņas ir
 iekļautas uPortal repozitorijā.


\subsection{Meklēšana}

Meklēšanas mehānisma realizēšana portālam nenotika bakalaura darba ietvaros, bet
tas tika realizēts ar uPortal meklēšanas \emph{API}. Meklēšanas realizācija
ļauj realizēt to pa daļām, kas arī tika veikts. Portāla izstrādes procesā
meklēšanas iespēja tika realizēta tikai daļai no portletiem, kas definē jaunu
prasību portāla attīstības virsienā -- implementēt meklēšanas mehānismu lielākā
daļā portletu.



\subsection{Integrācija ar citām sistēmām}

Bakalaura darba procesā veikt integrāciju ar \emph{Moodle}~\cite{link:moodle} un 
citām sistēmām, kas aprakstītās \ref{subsec:r-other} apakšnodaļā, nebija 
vajadzīgs.
Izmantojot to priekšrocību, ka integrācija ar e-mācību vidi, tāpat kā citas
komponentes, ir izstrādāta saskaņā ar standartu, un šie standarti ir
atpakaļsavietojami, tad tika izmantoti jau iepriekš izstrādātie risinājumi, kas
balstās uz~\ref{subsec:jsr168} standartu.









